/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package pr3.funcion;

import pr3.cromosoma.Estado;

/**
 *
 * @author Gonzalo Ortiz Jaureguizar (gortiz at software.imdea.org)
 */
public class EQ extends Funcion {
    
    Funcion arg1, arg2;

    public EQ() {
    }

    public EQ(Funcion arg1, Funcion arg2) {
        this.arg1 = arg1;
        this.arg2 = arg2;
    }
    
    @Override
    public Object evaluar(Estado estado) {
        Object o1 = arg1.evaluar(estado);
        Object o2 = arg2.evaluar(estado);
        if(o1 == null || o2 == null || !o1.equals(o2))
            return false;
        return true;
    }

    @Override
    public int getAridad() {
        return 2;
    }

    @Override
    public void setArgumento(int i, Funcion arg) {
        switch(i) {
            case 0:
                arg1 = arg;
                break;
            case 1:
                arg2 = arg;
                break;
            default:
                throw new IllegalArgumentException("Not supported.");
        }        
    }

    @Override
    public Funcion getArgumento(int i) {
        switch(i) {
            case 0:
                return arg1;
            case 1:
                return arg2;
            default:
                throw new IllegalArgumentException("Not supported.");
        }
    }

    @Override
    public Funcion clone() {
        EQ clon = new EQ(arg1.clone(), arg2.clone());
        clon.arg1.setPadre(clon);
        clon.arg2.setPadre(clon);
        return clon;
    }

    @Override
    public String toString(int profundidad) {
        StringBuilder sb = new StringBuilder();
        for(int i = 0; i < profundidad; i++) {
            sb.append("  ");
        }
        sb.append("EQ");
        sb.append('\n');
        sb.append(arg1.toString(profundidad + 1));
        sb.append('\n');
        sb.append(arg2.toString(profundidad + 1));
        return sb.toString();
    }
    
    public String toString() {
        return toString(0);
    }
    
}
